// === 严格相等

console.log(77 === '77') //类型不同,直接返回false
console.log(true === 1) //类型不同,直接返回false
console.log(undefined === null) //true和undefined是两个不同类型的原生类型,直接返回false

let obj = {}
let obj2 ={}

console.log(obj === obj2) //看起来一样的两个引用类型,===比较的是内存地址,返回false

// == 宽松相等

console.log(77 == '77') //宽松相等,会进行string隐式转换成77,返回true
console.log(true == 1) //布尔值ture会被转换成1
console.log(undefined == null)  //在宽松相等下,这是一个非常特殊的规则,js官方直接规定了在宽松相等下undefined和null比较为true
console.log(0 == null) //null在宽松相等下除了与undefined比较外,其他都为false
console.log([1] == '1') //数组[1]会进行隐式转换(调用引擎内部的隐式转换函数toprimitive转换成原始数据类型)
console.log(obj == obj2)//宽松相等比较不同的引用地址的引用对象,效果和===一致
